package com.millstein.realtime.util;

import lombok.experimental.UtilityClass;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @Description
 * @Author tsing
 * @Date 2024-09-29 11:30
 */
@UtilityClass
public class CommonUtil {

    /**
     * 将时间戳格式化成日期字符串
     * @param timestamp 待格式化的时间戳
     * @return
     */
    public static String formatDate(long timestamp) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        return sdf.format(new Date(timestamp));
    }

    /**
     * 将时间戳格式化成时间字符串
     * @param timestamp 待格式化的时间戳
     * @return
     */
    public static String formatTime(long timestamp) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sdf.format(new Date(timestamp));
    }

    /**
     * 将迭代器对象转成集合
     * @param elements 待转换的迭代器对象
     * @param <T> 迭代器中的数据类型
     * @return
     */
    public static <T> List<T> toList(Iterable<T> elements) {
        List<T> list = new ArrayList<>();
        for (T t : elements) {
            list.add(t);
        }
        return list;
    }

    /**
     * 将日期字符串转为日期对象
     * @param dateStr 日期字符串
     * @return
     */
    public static Date parseDate(String dateStr) {
        try {
            return new SimpleDateFormat("yyyy-MM-dd").parse(dateStr);
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 比较两个时间，如果one大，那么返回true，否则返回false
     * @param one 时间字符串1
     * @param two 时间字符串2
     * @return
     */
    public static boolean isLarger(String one, String two) {
        //2022-08-20 06:23:01.933Z
        // 把z干掉, 然后直接比字符串
        one = one.replaceAll("Z", "");
        two = two.replaceAll("Z", "");
        // compareTo: one 大于two的时候返回时正的
        // compareTo: 前 大于后的时候返回时true的
        return  one.compareTo(two) > 0;
    }
}
